from api.mod.modLoader import ModLoader


class Argument:
    def __init__(self, *arg, **item):
        self.arg = arg
        self.item = item


class ModFuncExecute:
    """
    模组函数执行器(可以创建对象哦)
    """

    def __init__(self, function_path=None):
        """
        [废弃DESCRIPT]
            现在有两种需求， 一种是直接提供mod的名称 一种是提供某个事件的键我们会给你找到合适的mod
        [0.2 DESCRIPT]
            开发WS 命令触发机制器的时候我们需要一个IOC组件该类重新进入我们的程序角色中，
            但是因为他的历史有些方法如 `getModpathByName` `getModpathByEvent` 依旧处于废弃的状态

        :param modname: 模组名称 彻底废弃
        :param eventname: 事件名称 彻底废弃
        :param function_path: 类似 %/helloworld.doit 的东西
        """
        self.function_path: str = function_path

    def funtionRun(self, *arg, **keyword):
        """
        重构
        :param arg:
        :param keyword:
        :return:
        """
        assert self.function_path is not None, "你需要指定一个函数/对象"
        if "%/" in self.function_path:
            self.function_path: str = self.function_path.replace("%/", self.modpath + ".")

        function_name = self.function_path.split(".")[-1]  # 从 路径中 拿到函数的名称
        model_path = ".".join(self.function_path.split(".")[:-1])  # 拿到模块的路径
        mod = __import__(model_path, globals(), locals(), [function_name])

        func = mod.__getattribute__(function_name)
        retval = func(*arg, **keyword)

        return retval
